﻿#ifndef PERSISTENCEINTERFACE_H
#define PERSISTENCEINTERFACE_H
#include <QString>
#include <QDateTime>
#include "MeasureData.h"
/**
 * @brief The PersistenceInterface class 这个类规范了数据存储的接口。
 *           包括如何加载和保持 Recipe。如何将测量数据存入数据库或者数据文件。
 *            这个类是个纯虚类，具体实现应该继承自这个类。
 *            Recipe 和测量数据如何存储由派生类来自行决定。
 *            可以放在同一个文件中，也可以分开。
 */
class PersistenceInterface
{
public:
    /**
     * @brief saveData 将 Data 中的数据保存到数据文件
     * @param data
     * @param label 可以是数据库文件名或者其他任何可以指示数据存储位置和方式的字符串
     * @return  1 表示成功，其他表示错误。错误编号由派生类自行决定
     */
    virtual int saveData(MeasurementData *data, QString label) = 0;
    virtual int saveData(MeasurementData *data, QString label, QDateTime t) = 0;
    /**
     * @brief loadRecipe 加载 Recipe 到 data 中。会清除掉 data 中原有的数据。
     * @param data
     * @param 可以是数据库文件名或者其他任何可以指示数据存储位置和方式的字符串
     * @return  1 表示成功，其他表示错误。错误编号由派生类自行决定
     */
    virtual int loadRecipe(MeasurementData *data, QString label) = 0;
    /**
     * @brief createRecipe 新建一个 Recipe，如果同名 Recipe 存在则覆盖。
     * @param data
     * @param 可以是数据库文件名或者其他任何可以指示数据存储位置和方式的字符串
     * @return  1 表示成功，其他表示错误。错误编号由派生类自行决定
     */
    virtual int createRecipe(MeasurementData *data, QString label) = 0;
};

#endif // PERSISTENCEINTERFACE_H
